/**
 * **************************************************************************************
 *
 * @Author 1044053532@qq.com
 * @License http://www.apache.org/licenses/LICENSE-2.0
 * **************************************************************************************
 */
package com.netty.session;

import com.netty.model.MessageWrapper;
import com.netty.model.SocketSession;
import io.netty.channel.ChannelHandlerContext;
import org.directwebremoting.ScriptSession;

import java.util.Set;

public interface SocketSessionManager {

    /**
     * 添加指定session
     *
     * @param session
     */
    void addSession(SocketSession session);

    /**
     * 更新session
     *
     * @param session
     */
    void updateSession(SocketSession session);


    /**
     * 删除指定session
     *
     * @param sessionId
     */
    void removeSession(String sessionId);

    /**
     * 删除指定session
     *
     * @param sessionId 我们自定义的sessionID
     * @param nid       socketid 系统生成的sessionId
     */
    void removeSession(String sessionId, String nid);

    /**
     * 根据指定sessionId获取session
     *
     * @param sessionId
     * @return
     */
    SocketSession getSession(String sessionId);

    /**
     * 获取所有的session
     *
     * @return
     */
    SocketSession[] getSessions();

    /**
     * 获取所有的session的id集合
     *
     * @return
     */
    Set<String> getSessionKeys();

    /**
     * 获取所有的session数目
     *
     * @return
     */
    int getSessionCount();

    /**
     * 创建session
     *
     * @param wrapper
     * @param ctx
     * @return
     */
    SocketSession createSession(MessageWrapper wrapper, ChannelHandlerContext ctx);

    /**
     * 创建session 配合dwr
     *
     * @param scriptSession
     * @param sessionid
     * @return
     */
    SocketSession createSession(ScriptSession scriptSession, String sessionid);

    /**
     * 判断session是否存在
     *
     * @param sessionId
     * @return
     */
    boolean exist(String sessionId);


}
